﻿using System.ComponentModel.DataAnnotations;
using System.Threading.Tasks;
using WebApiClientCore.Attributes;
using XUCore.WeChat.Apis;
using HttpPostAttribute = WebApiClientCore.Attributes.HttpPostAttribute;

namespace XUCore.WeChat.Enterprise.Apis.Suite
{
    /// <summary>
    /// 代开发应用模板凭证接口
    /// </summary>
    [HttpHost("https://qyapi.weixin.qq.com/cgi-bin/service/")]
    public interface IEnterpriseSuiteApi : IWeChatApiBase
    {
        /// <summary>
        /// 获取代开发应用模板凭证
        /// 该API用于获取代开发应用模板凭证（suite_access_token），该接口实际上与获取第三方应用凭证是同一个接口
        /// <see url="https://developer.work.weixin.qq.com/document/path/97162"/>
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("get_suite_token")]
        Task<SuiteTokenApiResult> GetSuiteTokenAsync([JsonNetContent(CharSet = "utf-8")] SuiteTokenInput input);
        /// <summary>
        /// 代开发授权应用secret的获取
        /// 对于企业自建应用开发模式，secret由企业管理员登录管理端获取。而代开发应用的secret获取方式与第三方应用中的企业永久授权码更为相似，流程如下：
        /// （1）企业管理员扫代开发模版授权码时，授权完成后会推送授权成功通知到应用代开发模版回调url。
        /// （2）收到回调后，开发者通过本接口获取到的permanent_code，即为代开发应用的secret。
        /// <see url="https://developer.work.weixin.qq.com/document/path/97163"/>
        /// </summary>
        /// <param name="suite_access_token"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("get_permanent_code")]
        Task<PermanentCodeApiResult> GetPermanentCodeAsync([Required] string suite_access_token, [JsonNetContent(CharSet = "utf-8")] PermanentCodeInput input);
        /// <summary>
        /// 获取企业凭证
        /// 第三方服务商在取得企业的永久授权码后，通过此接口可以获取到企业的access_token。获取后可通过通讯录、应用、消息等企业接口来运营这些应用。
        /// <see url="https://developer.work.weixin.qq.com/document/path/97162"/>
        /// </summary>
        /// <param name="suite_access_token"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("get_corp_token")]
        Task<CorpTokenApiResult> GetCorpTokenAsync([Required] string suite_access_token, [JsonNetContent(CharSet = "utf-8")] CorpTokenInput input);
        /// <summary>
        /// 获取预授权码
        /// 该API用于获取预授权码。预授权码用于企业授权时的第三方服务商安全验证。
        /// <see url="https://developer.work.weixin.qq.com/document/path/97162"/>
        /// </summary>
        /// <param name="suite_access_token"></param>
        /// <returns></returns>
        [HttpPost("get_pre_auth_code")]
        Task<PreAuthCodeApiResult> GetPreAuthCodeAsync([Required] string suite_access_token);
        /// <summary>
        /// 获取企业授权信息
        /// 该API用于通过永久授权码换取企业微信的授权信息。 永久code的获取，是通过临时授权码使用get_permanent_code 接口获取到的permanent_code。
        /// </summary>
        /// <param name="suite_access_token"></param>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("get_auth_info")]
        Task<AuthInfoApiResult> GetAuthInfoAsync([Required] string suite_access_token, [JsonNetContent(CharSet = "utf-8")] AuthInfoInput input);
        /// <summary>
        /// 明文corpid转换为加密corpid
        /// 为更好地保护企业与用户的数据，第三方应用获取的corpid不再是明文的corpid，将升级为第三方服务商级别的加密corpid（了解更多）。第三方可以将已有的明文corpid转换为第三方的加密corpid。
        /// </summary>
        /// <param name="provider_access_token">应用服务商的provider_access_token，获取方法参见服务商的凭证</param>
        /// <param name="input"></param>
        /// <returns></returns>
        [HttpPost("corpid_to_opencorpid")]
        Task<CorpidToOpenCorpidApiResult> GetCorpidToOpenCorpidAsync([Required] string provider_access_token, [JsonNetContent(CharSet = "utf-8")] CorpidToOpenCorpidInput input);
    }
}